package model.fantasma.estados;
import model.fabricas.FabricaEstados;
import model.fabricas.FabricaTiempo;
import model.interfaces.IFantasma;
import model.interfaces.IManejadorDeTiempo;
import model.interfaces.IPacman;
import model.utilidades.Constantes;
import model.utilidades.Vector;

public class EstadoPresa extends Estado {
	private IManejadorDeTiempo manejadorTiempo;
	
	public EstadoPresa(IFantasma fantasma){
		super(fantasma);
		this.manejadorTiempo = FabricaTiempo.crearManejadorDeTiempo(Constantes.TICKS_DE_PRESA_A_CAZADOR);
	}
	
	public void transicionAMuerto(){
		fantasma.cambiarEstado(FabricaEstados.crearEstadoMuerto(fantasma));
		
	}

	public void transicionAPresa(){

	}

	public void actualizarEstado(){
		manejadorTiempo.actualizarCantidadDeTicks();
		if(manejadorTiempo.llegoALaCantidadDeTicks())
			fantasma.cambiarEstado(FabricaEstados.crearEstadoCazador(fantasma));
	}

	@Override
	public void interactuarCon(IPacman pacman) {
		fantasma.cambiarEstado(FabricaEstados.crearEstadoMuerto(fantasma));
	}

	@Override
	public Vector obtenerVelocidadComoBuscador() {
		int multiplicador = 1;
		Vector direccion = new Vector(0,0);
		// TODO obtener direccion del movimiento

		Vector velocidad = direccion.multiplicarPorEscalar(multiplicador);
		return velocidad;
	}

	@Override
	public Vector obtenerVelocidadComoBuscadorTemperamental() {
		int multiplicador = 1;
		Vector direccion = new Vector(0,0);
		// TODO obtener direccion del movimiento

		Vector velocidad = direccion.multiplicarPorEscalar(multiplicador);
		return velocidad;
	}

	@Override
	public Vector obtenerVelocidadComoPerezoso() {
		int multiplicador = 1;
		Vector direccion = new Vector(0,0);
		// TODO obtener direccion del movimiento

		Vector velocidad = direccion.multiplicarPorEscalar(multiplicador);
		return velocidad;
	}

	@Override
	public Vector obtenerVelocidadComoZonzo() {
		int multiplicador = 1;
		Vector direccion = new Vector(0,0);
		// TODO obtener direccion del movimiento

		Vector velocidad = direccion.multiplicarPorEscalar(multiplicador);
		return velocidad;
	}	
	
}